/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */

package com.viators.actions;

import com.viators.beans.ListaNueva;
import com.viators.beans.Sisma_personaActionForm;
import com.viators.beans.Sisma_personaBean;
import com.viators.model.*;
import java.util.ArrayList;
import java.util.Date;
import java.util.List;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import org.apache.log4j.Logger;
import org.apache.struts.action.ActionForm;
import org.apache.struts.action.ActionForward;
import org.apache.struts.action.ActionMapping;

/**
 *
 * @author mvalentin
 */
public class PasajeroAction extends org.apache.struts.actions.DispatchAction{

    private static final Logger logger = Logger.getLogger(PasajeroAction.class);

    /***
     * Carga pasajeros desde la BD y coloca lalista en session
     */
    public ActionForward cargarPasajero(ActionMapping mapping, ActionForm form,
            HttpServletRequest request, HttpServletResponse response)
            throws Exception {

        logger.debug("cargando pasajeros BD " + request.getParameter("nlipa_codigo"));
        int nlipa_codigo = Integer.parseInt(request.getParameter("nlipa_codigo"));
        GestionPasajero gp = new GestionPasajero();

        if(request.getSession().getAttribute("listaPasajero")==null){
            request.getSession().setAttribute("listaPasajero", new ArrayList<ListaNueva>());
        }

        request.getSession().setAttribute("listaPasajero", gp.listarPasajeros(nlipa_codigo));
        logger.debug("lista pasa "+ gp.listarPasajeros(nlipa_codigo).size());

        return mapping.findForward("listaPasajeros");
    }

    /**
     * Carga pasajeros pero desde la session, no va hasta la BD
     */
    public ActionForward cargarPasajeroSes(ActionMapping mapping, ActionForm form,
            HttpServletRequest request, HttpServletResponse response)
            throws Exception {

        logger.debug("cargando pasajeros solo de session " + request.getParameter("nlipa_codigo"));
        if(request.getSession().getAttribute("listaPasajero")==null){
            request.getSession().setAttribute("listaPasajero", new ArrayList<ListaNueva>());
        }
        return mapping.findForward("listaPasajeros");
    }

    public ActionForward cargarPasajerosVehiculo(ActionMapping mapping, ActionForm form,
            HttpServletRequest request, HttpServletResponse response)
            throws Exception {


        int nlipa_codigo = Integer.parseInt(request.getParameter("nlipa_codigo"));
        GestionListaPasajeros glp = new GestionListaPasajeros();
        request.setAttribute("listaPasajero", glp.listarPasajerosVehiculo(null, null, null, null, null));

        return mapping.findForward("listaPasajeros");
    }
    
    public ActionForward cargarFrmPasajero(ActionMapping mapping, ActionForm form,
            HttpServletRequest request, HttpServletResponse response)
            throws Exception {
        GestionConductor gc = new GestionConductor();
        request.setAttribute("listaDocumentos", gc.listarDocumentos());
        request.setAttribute("listaEstados", gc.listarEstados());
        request.setAttribute("listaPaises", gc.listarPais());
        Sisma_personaBean perso = new Sisma_personaBean();
        perso.setAccion("nuevo");
        request.setAttribute("personaedit",  perso );
        return mapping.findForward("frmPasajeros");
    }

    public ActionForward guardarPasajero(ActionMapping mapping, ActionForm form,
            HttpServletRequest request, HttpServletResponse response)
            throws Exception {

        Sisma_personaActionForm spaf = (Sisma_personaActionForm)form;        
        GestionPasajero gp = new GestionPasajero();
        boolean flag = false;
        //spaf.setNpers_codigo(gc.generarCodigoConductor() + 1);
        List<ListaNueva> lista = (List<ListaNueva>)request.getSession().getAttribute("listaPasajero");
        if(lista==null){
            lista = new ArrayList<ListaNueva>();
        }
        ListaNueva pasajero = new ListaNueva();

        pasajero.setCdope_numero(spaf.getCdope_numero());
        
        pasajero.setCpers_apematerno(spaf.getCpers_apematerno());
        pasajero.setCpers_apepaterno(spaf.getCpers_apepaterno());
        pasajero.setCpers_nombres(spaf.getCpers_nombres());
        pasajero.setCpers_ocupacion(spaf.getCpers_ocupacion());

        pasajero.setCtido_descripcion( gp.obtenerTipoDocumento( spaf.getNtido_codigo() ));
        pasajero.setCesci_descripcion( gp.obtenerEstadoCivil( spaf.getNesci_codigo() ));
        pasajero.setNesci_codigo(spaf.getNesci_codigo());
        pasajero.setNtipa_codigo(spaf.getNtido_codigo());
        pasajero.setNtido_codigo(spaf.getNtido_codigo()) ;
        pasajero.setNpais_codigo(spaf.getNpais_codigo());
        pasajero.setNlipa_codigo(spaf.getNlipa_codigo());
        try {
            pasajero.setDpers_fechanacimiento( Utiles.dateToString( Utiles.stringToDate(spaf.getDpers_fechanacimientoconductor() , "dd/MM/yyyy"), "yyyy-MM-dd") );
        } catch (Exception e) {
              logger.error("Error en parse de fecha de nacimiento de pasajero");
        }
        pasajero.setAccion(spaf.getAccion());

        logger.debug( spaf.getAccion() );

        if(spaf.getAccion().equals("nuevo")){
           pasajero.setNpers_codigo( new Long(new Date().getTime()).intValue() );
           logger.debug("id persna " + pasajero.getNpers_codigo() );
        }else{
            pasajero.setNpers_codigo( spaf.getNpers_codigo() );
        }

        ListaNueva objrem = null;
        for(ListaNueva pj : lista){
            if(pj.getCdope_numero().trim().equals(pasajero.getCdope_numero()) ){
                if(spaf.getAccion().equals("nuevo")){
                    if(pj.getCpers_nombres().trim().equals(pasajero.getCpers_nombres() ) ){
                        objrem = pj;
                    }else{
                        flag = false;
                        request.setAttribute("validador", flag);
                        request.setAttribute("mensaje", "Documento duplicado");
                        request.getSession().setAttribute("listaPasajero",lista);
                        return mapping.findForward("validar");
                    }
                }else{
                    objrem = pj;
                }
            }
        }
        if(objrem!=null){
            lista.remove(objrem);
        }
        logger.debug("agregadoo");
        lista.add(pasajero);
        request.getSession().setAttribute("listaPasajero",lista);
        flag = true;
      
        request.setAttribute("validador", flag);
        request.setAttribute("mensaje", "");
        return mapping.findForward("validar");

    }

    public ActionForward eliminaPasajero(ActionMapping mapping, ActionForm form,
            HttpServletRequest request, HttpServletResponse response)
            throws Exception {
        int npers_codigo   = Integer.parseInt(request.getParameter("npers_codigo"));
        GestionPasajero gp = new GestionPasajero();
        boolean flag = false;

        flag = gp.eliminarPasajero(npers_codigo);

        request.setAttribute("validador", flag);
        request.setAttribute("mensaje", "");

        return mapping.findForward("validar");
    }
}
